package com.mzy.basics.utils.Date;

import java.time.*;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;

/**
 * Created with IntelliJ IDEA.
 *
 * @Author mzy
 * @Date 2022/4/9 14:18
 * @Version 1.0
 */
public class LocalDateUtils {
    public static void main(String[] args) {
        // 获取当前日期
        LocalDate ld = LocalDate.now();
        System.out.println(ld);
        // 输出结果：2017-03-20

        // 获取当前的年月日
        int year = ld.getYear();
        int month = ld.getMonthValue();
        int day = ld.getDayOfMonth();
        System.out.println("年:" + year + "月:" + month + "日：" + day);
        // 输出结果：年:2017月:3日：20

        // 获取指定日期
        LocalDate lcl = LocalDate.of(2020, 2, 5);
        System.out.println(lcl);
        // 输出结果：2020-02-05 ，这比我们自己拼接字符串可太爽了^_^

        // 获取指定时间，具体到毫秒
        LocalDateTime lct = LocalDateTime.now();
        System.out.println(lct);
        // 输出结果：2017-03-20T15:38:32.264

        // 指定具体时间
        LocalDateTime lct1 = LocalDateTime.of(1998, 3, 4, 14, 33);
        System.out.println(lct1);
        // 输出结果：1998-03-04T14:33

        // 判断两个日期是否相等
        LocalDate lld1 = LocalDate.now();
        LocalDate lld2 = LocalDate.of(2017, 3, 20);
        if (lld1.equals(lld2)) {
            System.out.println("日期相等");
        }
        // 输出结果:日期相等

        // 判断是不是生日，比如以我的生日举例声明
        LocalDate ldt = LocalDate.of(1994, 10, 07);
        LocalDate ldt1 = LocalDate.of(2020, 10, 07);
        MonthDay md = MonthDay.of(ldt.getMonth(), ldt.getDayOfMonth());
        MonthDay md1 = MonthDay.of(ldt1.getMonth(), ldt1.getDayOfMonth());
        if (md.equals(md1)) {
            System.out.println("zhaotong 生日快乐");
        }
        // 输出结果：zhaotong 生日快乐

        // 从当前时间，向前或向后扩展
        LocalDate lde = LocalDate.now();
        LocalDate lde1 = lde.plusDays(5);// 向后数五天
        System.out.println(lde1);// 2017-03-25
        LocalDate lde2 = lde.minusDays(5);// 向前数五天
        System.out.println(lde2);// 2017-03-15
        LocalDate lde3 = lde.minusWeeks(2);// 向前数两周
        System.out.println(lde3);// 2017-03-06
        // LocalDateTime 也拥有这些扩展函数，这里就不在一一说明了

        // java 8中的时钟
        Clock clock = Clock.systemUTC();
        Clock clock1 = Clock.systemDefaultZone();
        System.out.println(clock);
        System.out.println(clock1);

        // 输出结果：SystemClock[Z]，SystemClock[Asia/Shanghai]

        // 判断一个日期是在另一个日期前面还是后面

        LocalDate today = LocalDate.now();
        LocalDate tomorrow = LocalDate.of(2017, 3, 21);
        if (today.isBefore(tomorrow)) {
            System.out.println(true);
        }
        if (tomorrow.isAfter(today)) {
            System.out.println(true);
        }

        // java8 中处理不同的时区
        LocalDateTime ldtc = LocalDateTime.now();
        ZonedDateTime ldtczone = ZonedDateTime.of(ldtc,
                ZoneId.of("America/New_York"));
        System.out.println(ldtczone);
        // 输出：2017-03-20T17:35:56.257-04:00[America/New_York]

        // java中如何表示固定的日期
        YearMonth ym = YearMonth.of(2008, Month.FEBRUARY);
        System.out.println(ym.lengthOfMonth());// 2008年的2月是29天

        // 判断是否为闰年
        LocalDate date = LocalDate.now();
        if (date.isLeapYear()) {
            System.out.println(date + ":" + "是闰年");
        }

        // 获取两个日期之间的数据
        LocalDate date1 = LocalDate.of(2000, 10, 07);
        Period per = Period.between(date1, date);
        System.out.println("days:" + per.getDays());
        System.out.println("years:" + per.getYears());
        System.out.println("months:" + per.getMonths());
        // days:13
        // years:16
        // months:5
        // 相差16年，5个月，13天

        // java 8获取当前时间戳
        Instant is = Instant.now();
        System.out.println(is);
        // 输出：2017-03-20T09:53:59.433Z

        // 格式化输出日期
        String goodFriday = "1994-10-07";

        try {

            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
            LocalDate holiday = LocalDate.parse(goodFriday, formatter);
            System.out.println(holiday);
        } catch (DateTimeParseException ex) {
            ex.printStackTrace();

        }

        //将日期格式化，转化成字符串

        LocalDateTime ldtt= LocalDateTime.now();
        DateTimeFormatter format= DateTimeFormatter.ofPattern("yyyy-MM-dd hh:mm:a");
        String str=ldtt.format(format);
        System.out.println(str);
        //输出结果：2017-03-20 06:03:下午
    }
}
